#ifndef REGLA_H_
#define REGLA_H_
#include <utility>
#include "candies/Candy.h"

typedef enum direccion { IZQUIERDA, DERECHA, ARRIBA, ABAJO } Direccion;

class Regla {
  public:
    Regla(Candy *** tablero, int cantFilas, int cantColumnas);
    ~Regla();

    int aplicar(std::pair<int, int> origen);

    int goldenStar(std::pair<int, int> origen, std::pair<int, int> destino);

    void setTablero(Candy *** tab) {
        this->tablero = tab;
    }
    void setCantFilas(int nfilas) {
        this->cantFilas = nfilas;
    }
    void setCantCols(int ncols) {
        this->cantColumnas = ncols;
    }

  private:
    Candy ***tablero;
    int cantFilas;
    int cantColumnas;

    int tresBotonesMismoColor(std::pair<int, int> posInicial,
                              Direccion direccion);
    int cuatroBotonesMismoColor(std::pair<int, int> posCandy,
                                std::pair<int, int> posInicial, 
                                Direccion direccion);
    int cincoBotonesMismoColor(std::pair<int, int> posCandy,
                               std::pair<int, int> posInicial, 
                               Direccion direccion);

    int cuatroOMasMismoColor(std::pair<int, int> posInicial, 
    						 Direccion direccion,
                             int cantidad);

    /* Comportamiento de la golden star */
    int goldenStarMasButton(std::pair<int, int> button);
    int goldenStarMasMiniBar(std::pair<int, int> miniBar);
    int goldenStarMasGoldenStar();

    /* Para generar una miniBar a partir de los botones eliminados */
    Candy *obtenerMiniBar(Color color);

    /* Reglas para eliminar por algun criterio */
    int eliminarColor(Color color);
    int eliminarFila(int fila);
    int eliminarColumna(int columna);

    int eliminarPosicion(int i, int j);
    int eliminarTodo();
};

#endif
